package com.app.orderstatus.function;

import cn.hutool.core.map.MapUtil;
import com.app.orderstatus.OrderInfo;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import java.util.Map;
import java.util.function.Function;

/**
 * 函数式接口类
 *
 * @author ch
 * @date 2024/1/16 16:08
 */
@Service
public class StatusHandlerFunctionStrategy {

    /**
     * key 方法参数，多个参数可以自定义一个实体类处理
     * value 方法返回值
     */
    private Map<String, Function<OrderInfo, Object>> operationMap;

    @PostConstruct
    private void init() {
        operationMap = MapUtil.newHashMap();
        operationMap.put("完成", this::completeOrder);
        operationMap.put("终结", this::finalityOrder);
        operationMap.put("挂起", this::pauseOrder);
        operationMap.put("恢复", this::resumeOrder);
        operationMap.put("签收/取消签收", this::signOrder);
    }

    /**
     * @param params 方法参数
     * @return 方法返回
     */
    public Object doOperation(OrderInfo params) {
        String procStat = params.getProcStat();
        String stepStat = params.getStepStat();
        // todo 根据流程和环节状态，确定执行哪一个处理逻辑
        String type = "完成";
        return operationMap.get(type).apply(params);
    }

    private Object completeOrder(OrderInfo params) {
        // TODO 完成的处理逻辑
        System.out.println("完成的处理逻辑");
        return null;
    }

    private Object finalityOrder(OrderInfo params) {
        // TODO 终结的处理逻辑
        System.out.println("终结的处理逻辑");
        return null;
    }

    private Object pauseOrder(OrderInfo params) {
        // TODO 挂起的处理逻辑
        System.out.println("挂起的处理逻辑");
        return null;
    }

    private Object resumeOrder(OrderInfo params) {
        // TODO 恢复的处理逻辑
        System.out.println("恢复的处理逻辑");
        return null;
    }

    private Object signOrder(OrderInfo params) {
        // TODO 签收/取消签收的处理逻辑
        System.out.println("签收/取消签收的处理逻辑");
        return null;
    }

}
